#pragma once 

#include <iostream>
#include <cassert>
#include <semaphore.h>

// 信号量类
class Sem
{
public:
    Sem(int value)
    {
        sem_init(&_sem, 0, value);
    }

    // p操作 -- 等待信号量
    void p()
    {
        sem_wait(&_sem);
    }

    // v操作 -- 释放信号量
    void v()
    {
        sem_post(&_sem);
    }

    ~Sem()
    {
        sem_destroy(&_sem);
    }

private:
    sem_t _sem;
};